package com.dd.cloud.user.mapper.order;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dd.cloud.user.entity.order.OrderPay;
import com.dd.cloud.user.req.order.*;
import com.dd.cloud.user.res.order.*;
import com.dd.cloud.common.vo.PageVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 订单表 Mapper 接口
 * </p>
 *
 * @author czg
 * @since 2022-09-03
 */
public interface OrderPayMapper extends BaseMapper<OrderPay> {
    /**
     * 查询处方订单列表
     *
     * @param iPage
     * @param req
     * @return
     */
    IPage<OrderPresPageRes> queryOrderPresPage(IPage<?> iPage, @Param("req") OrderPresPageReq req);

    /**
     * 查询处方订单列表 运营后台
     *
     * @param iPage
     * @param req
     * @return
     */
    IPage<OrderPresAdminPageRes> queryOrderPresAdminPage(IPage<?> iPage, @Param("req") OrderPresAdminPageReq req);

    /**
     * 查询处方订单列表 药房后台
     *
     * @param iPage
     * @param req
     * @return
     */
    IPage<OrderPresPharmacyPageRes> queryOrderPresPharmacyPage(IPage<?> iPage, @Param("req") OrderPresPharmacyPageReq req);

    /**
     * 查询处方交易明细列表 药房后台
     *
     * @param iPage
     * @param req
     * @return
     */
    PageVo<OrderPresDetailListRes> queryOrderPresDetailListPage(IPage<?> iPage, @Param("req") OrderPresDetailListReq req);

    /**
     * 查询处方收入统计列表 药房后台
     *
     * @param iPage
     * @param req
     * @return
     */
    PageVo<OrderPresIncomeStatisticsListRes> queryOrderPresIncomeStatisticsList(IPage<?> iPage, @Param("req") OrderPresIncomeStatisticsListReq req);

    /**
     * 查询处方交易明细列表 统计数据 药房后台
     *
     * @param req
     * @return
     */
    OrderPresDetailStatisticsRes queryOrderPresDetailStatistics(@Param("req") OrderPresDetailListReq req);

    /**
     * 查询处方收入统计列表 统计数据 药房后台
     *
     * @param req
     * @return
     */
    OrderPresIncomeStatisticsRes queryOrderPresIncomeStatistics(@Param("req") OrderPresIncomeStatisticsListReq req);

    /**
     * 查询处方订单收益列表
     *
     * @param iPage
     * @param req
     * @return
     */
    PageVo<OrderProfitPageRes> queryOrderProfitPage(IPage<?> iPage, @Param("req") OrderProfitPageReq req);

    /**
     * 查询所有处方订单收益
     *
     * @param req
     * @return
     */
    Integer queryOrderProfitTotal(@Param("req") OrderProfitPageReq req);

    /**
     * 查询订单详情
     *
     * @param orderNo
     * @return
     */
    OrderPresDetailRes queryOrderPresDetail(@Param("orderNo") String orderNo);

    /**
     * 查询订单处方药材列表
     *
     * @param orderNo
     * @return
     */
    List<OrderPresDrugListRes> queryOrderPresDrugList(@Param("orderNo") String orderNo);

    /**
     * 查询订单流水列表
     *
     * @param orderNo
     * @return
     */
    List<OrderFlowListRes> queryOrderFlowList(@Param("orderNo") String orderNo);

    /**
     * 查询订单流水列表
     *
     * @param tencode
     * @return
     */
    List<OrderFlowListRes> queryOrderFlowListByTencode(@Param("tencode") String tencode);

    /**
     * 结算订单
     *
     * @param req
     * @return
     */
    int settlementOrder(@Param("req") OrderSettlementReq req);

    /**
     * 查询药房名称
     *
     * @param pharmacyId
     * @return
     */
    String queryPharmacyNames(@Param("pharmacyId") String pharmacyId);

    /**
     * 查询机构统计列表
     *
     * @param iPage
     * @param req
     * @return
     */
    IPage<OrderStatisticsPageRes> queryOrderStatisticsPage(IPage<?> iPage, @Param("req") OrderStatisticsPageReq req);

    /**
     * 机构支付统计列表
     *
     * @param iPage
     * @param req
     * @return
     */
    PageVo<MechanPayStatisticsPageRes> queryMechanPayStatisticsPage(IPage<?> iPage, @Param("req") MechanPayStatisticsPageReq req);

    /**
     * 机构支付统计列表-统计金额
     *
     * @param req
     * @return
     */
    Long queryMechanPayStatisticsTotalPrice(@Param("req") MechanPayStatisticsPageReq req);

    /**
     * 医生支付统计列表
     *
     * @param iPage
     * @param req
     * @return
     */
    PageVo<DoctorPayStatisticsPageRes> queryDoctorPayStatisticsPage(IPage<?> iPage, @Param("req") DoctorPayStatisticsPageReq req);

    /**
     * 医生支付统计列表-统计金额
     *
     * @param req
     * @return
     */
    Long queryDoctorPayStatisticsTotalPrice(@Param("req") DoctorPayStatisticsPageReq req);

    /**
     * 查询问诊处方订单
     * @param iPage
     * @param req
     * @return
     */
    IPage<InquiryPresRes> selectInquiryPres(@Param("iPage") IPage<InquiryPresRes> iPage,
                                            @Param("req") InquiryPresReq req);

    /**
     * 查询问诊订单
     * @param iPage
     * @param req
     * @return  IPage<InquireOrderRes>
     */
    IPage<InquireOrderRes> selectInquiryOrder(@Param("iPage") IPage<InquireOrderRes> iPage,
                                              @Param("req") InquiryOrderReq req);
}
